/**
 * @file Lm95071.h
 *
 * Definiciones y Estructuras relativas Sensor de Temperatura LM95071
 *
 * @version  1.01a
 * @date     30/07/2013
 * @author   Pirx
 *
 */

#ifndef __LM95071_H_
#define __LM95071_H_


/***************************** Include Files *********************************/

#include <Generic.h>


/************************** Constant Definitions ******************************/

#define		LM95071BUFFER					8

/**************************** Type Definitions ******************************/

// Maquina de Estados del LM95071
typedef enum {
	Pdown = 0,
	Ident,
	Setup,
	Read,
} Lm95071Sec;

typedef struct {									// Estructura para el control del LM95071

	// Lineas de Control definidas en el Hardware
	// *Temp_clk;
	// *Temp_dat;
	// *Temp_cs;
	// *Temp_clktris;
	// *Temp_dattris;
	// *Temp_cstris;

	// Controles
	_Bool		_inh;								// Inhibir Comunicaciones = TRUE
	_Bool		_lock;								// Comunicaciones Enganchadas (Dispositivo Reconocido) = TRUE
	_Bool		_ena;								// Dispositivo Habilitado = TRUE
	Lm95071Sec	Estado;								// Estado de las comunicaciones
	UINT16		DataRd;								// Copia del Ultimo Dato Recibido
	UINT16		DataWr;								// Copia del Ultimo Dato Transmitido
	short int	Buffer[LM95071BUFFER];				// Buffer de Datos
	UINT8		ContRx;								// Contador de Datos
	short int	Celsius;							// Grados CELSIUS en centesimas
	short int	Fahrenheit;							// Grados Fahrenhein en centesimas
} StrLM95071;


/************************** Function Prototypes *****************************/

extern void Lm95071Init(UINT8 dev);					// Inicializa el Dispositivo
extern void Lm95071Process(UINT8 dev);				// Proceso de comunicaciones
extern UINT8 Lm95071_get_Estado(UINT8 dev);			// Obtiene el estado del Driver

extern _Bool Lm95071_get_lock(UINT8 dev);			// Obtener Datos Validos
extern short int Lm95071_get_Celsius(UINT8 dev);	// Obtener Grados Celsius
extern short int Lm95071_get_Fahrenheit(UINT8 dev);	// Obtener Grados Fahrenheit

#endif
